package com.ruoyi.cust.service.impl;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.cust.domain.CityTag;
import com.ruoyi.cust.vo.CityModuleTreeVo;
import com.ruoyi.cust.vo.CityModuleVo;
import com.ruoyi.cust.vo.CityTagTreeVo;
import com.ruoyi.cust.vo.CityTagVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.cust.mapper.CityModuleMapper;
import com.ruoyi.cust.domain.CityModule;
import com.ruoyi.cust.service.ICityModuleService;

/**
 * 模块Service业务层处理
 *
 * @author ruoyi
 * @date 2024-12-06
 */
@Service
public class CityModuleServiceImpl implements ICityModuleService {
    @Autowired
    private CityModuleMapper cityModuleMapper;

    /**
     * 查询模块
     *
     * @param moduleId 模块主键
     * @return 模块
     */
    @Override
    public CityModule selectCityModuleByModuleId(Long moduleId) {
        return cityModuleMapper.selectCityModuleByModuleId(moduleId);
    }

    /**
     * 查询模块列表
     *
     * @param cityModule 模块
     * @return 模块
     */
    @Override
    public List<CityModule> selectCityModuleList(CityModule cityModule) {
        return cityModuleMapper.selectCityModuleList(cityModule);
    }

    /**
     * 新增模块
     *
     * @param cityModule 模块
     * @return 结果
     */
    @Override
    public int insertCityModule(CityModule cityModule) {
                cityModule.setCreateTime(DateUtils.getNowDate());
            return cityModuleMapper.insertCityModule(cityModule);
    }

    /**
     * 修改模块
     *
     * @param cityModule 模块
     * @return 结果
     */
    @Override
    public int updateCityModule(CityModule cityModule) {
        return cityModuleMapper.updateCityModule(cityModule);
    }

    /**
     * 批量删除模块
     *
     * @param moduleIds 需要删除的模块主键
     * @return 结果
     */
    @Override
    public int deleteCityModuleByModuleIds(Long[] moduleIds) {
        return cityModuleMapper.deleteCityModuleByModuleIds(moduleIds);
    }

    /**
     * 删除模块信息
     *
     * @param moduleId 模块主键
     * @return 结果
     */
    @Override
    public int deleteCityModuleByModuleId(Long moduleId) {
        return cityModuleMapper.deleteCityModuleByModuleId(moduleId);
    }

    @Override
    public List<CityModuleTreeVo> moduleTree(CityModule cityModule) {
        List<CityModule> list = cityModuleMapper.selectCityModuleList(cityModule);;
        Map<Integer, List<CityModuleVo>> groupedModules = list.stream()
                .map(module -> {
                    CityModuleVo cityModuleVo = new CityModuleVo();
                    BeanUtils.copyProperties(module, cityModuleVo);
                    return cityModuleVo;
                })
                .collect(Collectors.groupingBy(CityModuleVo::getModuleType));

        return groupedModules.entrySet().stream()
                .map(entry -> {
                    CityModuleTreeVo cityModuleTreeVo = new CityModuleTreeVo();
                    cityModuleTreeVo.setModuleType(entry.getKey());
                    cityModuleTreeVo.setCityModuleVoList(entry.getValue());
                    return cityModuleTreeVo;
                })
                .collect(Collectors.toList());
    }
}
